import axios, { AxiosRequestConfig, AxiosResponse } from 'axios'

/**
 * 获取 CSRF Token（适用于 Django 后端）
 */
export function getCSRFToken(): string {
  const cookieValue = document.cookie
    .split('; ')
    .find(row => row.startsWith('csrftoken='))
    ?.split('=')[1] || ''
  return cookieValue
}

/**
 * 通用请求方法（支持 GET、POST、PUT、DELETE 等）
 * @param url Django后端API地址
 * @param method 请求方法
 * @param data 请求体数据（GET时为params，POST/PUT为body）
 * @param extraHeaders 可选，附加header
 */
export async function request<T = any>(
  url: string,
  method: 'GET' | 'POST' | 'PUT' | 'DELETE' = 'GET',
  data: Record<string, any> = {},
  extraHeaders: Record<string, string> = {}
): Promise<T> {
  const headers: Record<string, string> = {
    'X-CSRFToken': getCSRFToken(),
    ...extraHeaders,
  }
  // POST/PUT 发送 JSON，GET/DELETE 发送 params
  let config: AxiosRequestConfig = {
    url,
    method,
    headers,
  }
  if (method === 'GET' || method === 'DELETE') {
    config.params = data
  } else {
    config.headers!['Content-Type'] = 'application/json'
    config.data = data
  }
  const response: AxiosResponse<T> = await axios(config)
  return response.data
}
